package design.patterns.iterator.pattern;

/**
 * @Desc:   迭代器模式
 *      必看：https://blog.csdn.net/panweiwei1994/article/details/75308648
 *      1.为什么要使用迭代器模式：
 *          在软件设计中，我们常用聚合对象来存储和遍历数据。存储和遍历是两个职责，如果都放在聚合对象中，就违反了“单一职责原则”。
 *          迭代器模式就是为了解决这个问题而产生的。迭代器模式将遍历的职责从聚合对象中剥离出来，放在一个称为迭代器的类中，使其更
 *          符合“单一职责原则”
 *      2.什么是迭代器模式
 *          迭代器模式(Iterator Pattern)：提供一种方法来访问聚合对象中的各个元素，而不用暴露这个对象的内部表示。
 *          在Java中
 *                  ArrayList的迭代器有两种：Iterator和ListIterator -https://blog.csdn.net/panweiwei1994/article/details/76946406
 *                  LinkedList的迭代器有三种：Iterator、ListIterator、DescendingIterator -https://blog.csdn.net/panweiwei1994/article/details/77045407
 *                  Vector的迭代器有两种：Iterator和ListIterator -https://blog.csdn.net/panweiwei1994/article/details/77163332
 *      3.别名：游标(Cursor)
 *      4.类型：对象行为型模式
 *      5.遵守的原则:单一职责原则、开闭原则
 *      6.角色:
 *          Iterator：抽象迭代器
 *              抽象类
 *              具体迭代器的父类。
 *              定义访问和遍历元素的接口
 *          ConcreteIterator：具体迭代器
 *              具体类
 *              继承抽象迭代器。
 *              实现了访问和遍历元素的方法。
 *              对该聚合对象遍历时跟踪当前位置
 *          Aggregate：抽象聚合类
 *              抽象类
 *              存储和管理元素对象。
 *              定义创建相应迭代器对象的接口，充当抽象迭代器工厂角色。
 *          ConcreteAggregate ：具体聚合类
 *              具体类
 *              继承抽象聚合类。
 *              实现Aggregate的方法，创建ConcreteIterator对象
 *      7.优缺点：
 *          优点：
 *              遵守“单一职责原则”。将聚合器类的遍历职责剥离出来，使聚合器类遵守“单一职责原则”。
 *              遵守“开闭原则”。由于有抽象聚合类和抽象迭代器类，添加新的聚合类和迭代器都不需要修改原有代码。
 *              支持以不同的遍历算法遍历聚合对象，只要用新的迭代器替换就的就可以
 *          缺点：
 *              待补充
 *      8.适用环境
 *          访问一个聚合对象的内容而无须暴露它的内部表示
 *          需要为一个聚合对象提供多种遍历方式。
 *          为遍历不同的聚合结构提供一个统一的接口，在该接口的实现类中为不同的聚合结构提供不同的遍历方式，而客户端可以一致性地操作该接口
 *      9.使用场景
 *          Java的Iterator
 *          Iterator.java                           作为抽象迭代器
 *          Collection.java继承Iterator.java        具体迭代器
 *          ArrayList.java等容器实现Collection.java  具体聚合类，且其中包含获取迭代器的方法iterator()
 *      10.扩展-相关模式
 *          组合模式Composite：迭代器常被应用到像复合这样的递归结构上。
 *          工厂方法模式Facotory Method：多态迭代器靠Facotry Method来例化适当的迭代器子类。
 *          备忘录模式Memento：常与迭代器一起使用。迭代器可以使用memento捕获一个迭代的状态。迭代器在其内部存储memento。
 * @author: cww
 * @DateTime: 2019-05-03 10:05
 */

public class IteratorPattern {
}
